home *** CD-ROM | disk | FTP | other *** search
/ PC World 2007 June / PCWorld_2007-06_cd.bin / v cisle / tclock / tclocklight-040702-3.exe / source / sntp / dialog.c next >
C/C++ Source or Header  |  2004-09-07  |  8KB  |  319 lines

  1. /*-------------------------------------------------------------
  2.   dialog.c : SNTP setting dialog
  3.   (C) Kazuto Sato 1997-2003
  4.   For the license, please read readme.txt.
  5.   
  6.   Written by Kazubon, Nanashi-san
  7. ---------------------------------------------------------------*/
  8.  
  9. #include "tcsntp.h"
  10.  
  11. /* Globals */
  12.  
  13. void OnShowDialog(HWND hwnd);
  14.  
  15. HWND g_hDlg = NULL;
  16. HWND g_hwndLog = NULL;
  17.  
  18. /* Statics */
  19.  
  20. BOOL CALLBACK DlgProc(HWND, UINT, WPARAM, LPARAM);
  21. static void OnInit(HWND hDlg);
  22. static void OnOK(HWND hDlg);
  23. static void OnCancel(HWND hDlg);
  24. static void OnHelp(HWND hDlg);
  25. static void OnNTPServer(HWND hDlg);
  26. static void OnDelServer(HWND hDlg);
  27. static void OnBrowse(HWND hDlg);
  28. static void OnSyncNow(HWND hDlg);
  29.  
  30. static char *m_section = "SNTP";
  31.  
  32. /*-------------------------------------------------------
  33.   SNTPM_SHOWDLG message
  34. ---------------------------------------------------------*/
  35. void OnShowDialog(HWND hwnd)
  36. {
  37.     if(g_hDlg && IsWindow(g_hDlg)) ;
  38.     else
  39.         g_hDlg = CreateDialog(g_hInst, MAKEINTRESOURCE(IDD_DIALOG),
  40.             NULL, DlgProc);
  41.     SetForegroundWindow98(g_hDlg);
  42. }
  43.  
  44. /*-------------------------------------------
  45.   dialog procedure
  46. ---------------------------------------------*/
  47. BOOL CALLBACK DlgProc(HWND hDlg, UINT message,
  48.     WPARAM wParam, LPARAM lParam)
  49. {
  50.     switch(message)
  51.     {
  52.         case WM_INITDIALOG:
  53.             OnInit(hDlg);
  54.             return TRUE;
  55.         case WM_COMMAND:
  56.         {
  57.             int id, code;
  58.             id = LOWORD(wParam); code = HIWORD(wParam);
  59.             switch(id)
  60.             {
  61.                 case IDOK:
  62.                     OnOK(hDlg);
  63.                     break;
  64.                 case IDCANCEL:
  65.                     OnCancel(hDlg);
  66.                     break;
  67.                 case IDC_MYHELP:
  68.                     OnHelp(hDlg);
  69.                     break;
  70.                 
  71.                 case IDC_NTPSERVER:
  72.                     if(code == CBN_EDITCHANGE)
  73.                         OnNTPServer(hDlg);
  74.                     break;
  75.                 case IDC_DELSERVER:
  76.                     OnDelServer(hDlg);
  77.                     break;
  78.                 case IDC_SYNCNOW:
  79.                     OnSyncNow(hDlg);
  80.                     break;
  81.                 case IDC_SYNCSOUNDBROWSE:
  82.                     OnBrowse(hDlg);
  83.                     break;
  84.             }
  85.             return TRUE;
  86.         }
  87.     }
  88.     return FALSE;
  89. }
  90.  
  91. /*-------------------------------------------
  92.   initialize main dialog
  93. ---------------------------------------------*/
  94. void OnInit(HWND hDlg)
  95. {
  96.     char s[MAX_PATH], entry[20], server[BUFSIZE_SERVER];
  97.     UDACCEL uda[2];
  98.     int n, count, i;
  99.     HICON hIcon;
  100.     
  101.     g_hwndLog = GetDlgItem(hDlg, IDC_SNTPLOGRESULT);
  102.     
  103.     // common/tclang.c
  104.     SetDialogLanguage(hDlg, "SyncTime", g_hfontDialog);
  105.     
  106.     hIcon = LoadIcon(g_hInst, MAKEINTRESOURCE(IDI_TCLOCK));
  107.     SendMessage(hDlg, WM_SETICON, ICON_BIG, (LPARAM)hIcon);
  108.     
  109.     // common/dialog.c
  110.     SetMyDialgPos(hDlg, 32, 32);
  111.     
  112.     UpDown_SetBuddy(hDlg, IDC_TIMEOUTSPIN, IDC_TIMEOUT);
  113.     
  114.     GetMyRegStr(m_section, "Server", server, BUFSIZE_SERVER, "");
  115.     
  116.     count = GetMyRegLong(m_section, "ServerNum", 0);
  117.     
  118.     if(server[0] == 0 && count == 0)
  119.         strcpy(server, "ntp1.jst.mfeed.ad.jp");
  120.     
  121.     for(i = 0; i < count; i++)
  122.     {
  123.         wsprintf(entry, "Server%d", i + 1);
  124.         GetMyRegStr(m_section, entry, s, 80, "");
  125.         if(s[0]) CBAddString(hDlg, IDC_NTPSERVER, (LPARAM)s);
  126.     }
  127.     
  128.     if(server[0])
  129.     {
  130.         i = CBFindStringExact(hDlg, IDC_NTPSERVER, server);
  131.         if(i == LB_ERR)
  132.         {
  133.             CBInsertString(hDlg, IDC_NTPSERVER, 0, (LPARAM)server);
  134.             i = 0;
  135.         }
  136.         CBSetCurSel(hDlg, IDC_NTPSERVER, i);
  137.     }
  138.     
  139.     OnNTPServer(hDlg);
  140.     
  141.     n = GetMyRegLong(m_section, "Timeout", 1000);
  142.     if(n < 1 || 30000 < n) n = 1000;
  143.     UpDown_SetRange(hDlg, IDC_TIMEOUTSPIN, 30000, 0);
  144.     UpDown_SetPos(hDlg, IDC_TIMEOUTSPIN, n);
  145.     
  146.     uda[0].nSec = 1; uda[0].nInc = 10;
  147.     uda[1].nSec = 2; uda[1].nInc = 100;
  148.     UpDown_SetAccel(hDlg, IDC_TIMEOUTSPIN, 2, uda);
  149.     
  150.     CheckDlgButton(hDlg, IDC_SNTPLOG,
  151.         GetMyRegLong(m_section, "SaveLog", TRUE));
  152.     
  153.     GetMyRegStr(m_section, "Sound", s, MAX_PATH, "");
  154.     SetDlgItemText(hDlg, IDC_SYNCSOUND, s);
  155. }
  156.  
  157. /*-------------------------------------------
  158.   "OK" button
  159. ---------------------------------------------*/
  160. void OnOK(HWND hDlg)
  161. {
  162.     char s[MAX_PATH], entry[20];
  163.     char server[BUFSIZE_SERVER];
  164.     int i, count, index;
  165.     
  166.     GetDlgItemText(hDlg, IDC_NTPSERVER, server, BUFSIZE_SERVER);
  167.     SetMyRegStr(m_section, "Server", server);
  168.     
  169.     if(server[0])
  170.     {
  171.         index = CBFindStringExact(hDlg, IDC_NTPSERVER, server);
  172.         if(index != LB_ERR)
  173.             CBDeleteString(hDlg, IDC_NTPSERVER, index);
  174.         CBInsertString(hDlg, IDC_NTPSERVER, 0, server);
  175.         CBSetCurSel(hDlg, IDC_NTPSERVER, 0);
  176.     }
  177.     count = CBGetCount(hDlg, IDC_NTPSERVER);
  178.     for(i = 0; i < count; i++)
  179.     {
  180.         CBGetLBText(hDlg, IDC_NTPSERVER, i, s);
  181.         wsprintf(entry, "Server%d", i+1);
  182.         SetMyRegStr(m_section, entry, s);
  183.     }
  184.     SetMyRegLong(m_section, "ServerNum", count);
  185.     
  186.     OnNTPServer(hDlg);
  187.     
  188.     SetMyRegLong(m_section, "Timeout",
  189.         UpDown_GetPos(hDlg, IDC_TIMEOUTSPIN));
  190.     SetMyRegLong(m_section, "SaveLog",
  191.         IsDlgButtonChecked(hDlg, IDC_SNTPLOG));
  192.     
  193.     GetDlgItemText(hDlg, IDC_SYNCSOUND, s, MAX_PATH);
  194.     SetMyRegStr(m_section, "Sound", s);
  195.     
  196.     DestroyWindow(hDlg);
  197.     g_hDlg = g_hwndLog = FALSE;
  198.     PostMessage(g_hwndMain, WM_CLOSE, 0, 0);
  199. }
  200.  
  201. /*-------------------------------------------
  202.   "Cancel" button
  203. ---------------------------------------------*/
  204. void OnCancel(HWND hDlg)
  205. {
  206.     DestroyWindow(hDlg);
  207.     g_hDlg = g_hwndLog = FALSE;
  208.     PostMessage(g_hwndMain, WM_CLOSE, 0, 0);
  209. }
  210.  
  211. /*-------------------------------------------
  212.   "Help" button
  213. ---------------------------------------------*/
  214. void OnHelp(HWND hDlg)
  215. {
  216.     char helpurl[MAX_PATH], title[MAX_PATH];
  217.     
  218.     if(!g_langfile[0]) return;
  219.     
  220.     GetMyRegStr(NULL, "HelpURL", helpurl, MAX_PATH, "");
  221.     if(helpurl[0] == 0)
  222.     {
  223.         if(GetPrivateProfileString("Main", "HelpURL", "", helpurl,
  224.             MAX_PATH, g_langfile) == 0) return;
  225.     }
  226.     
  227.     if(GetPrivateProfileString("SyncTime", "HelpURL", "", title,
  228.         MAX_PATH, g_langfile) == 0) return;
  229.     
  230.     if(strlen(helpurl) > 0 && helpurl[ strlen(helpurl) - 1 ] != '/')
  231.         del_title(helpurl);
  232.     add_title(helpurl, title);
  233.     
  234.     ShellExecute(hDlg, NULL, helpurl, NULL, "", SW_SHOW);
  235. }
  236.  
  237. /*------------------------------------------------
  238.     When server name changed
  239. --------------------------------------------------*/
  240. void OnNTPServer(HWND hDlg)
  241. {
  242.     EnableDlgItem(hDlg, IDC_SYNCNOW,
  243.         GetWindowTextLength(GetDlgItem(hDlg,IDC_NTPSERVER))>0);
  244.     EnableDlgItem(hDlg, IDC_DELSERVER,
  245.         CBGetCount(hDlg, IDC_NTPSERVER)>0);
  246. }
  247.  
  248. /*------------------------------------------------
  249.     Delete Server Name
  250. --------------------------------------------------*/
  251. void OnDelServer(HWND hDlg)
  252. {
  253.     char server[BUFSIZE_SERVER];
  254.     int index, count;
  255.     
  256.     GetDlgItemText(hDlg, IDC_NTPSERVER, server, BUFSIZE_SERVER);
  257.     count = CBGetCount(hDlg, IDC_NTPSERVER);
  258.     index = CBFindStringExact(hDlg, IDC_NTPSERVER, server);
  259.     if(index != LB_ERR)
  260.     {
  261.         CBDeleteString(hDlg, IDC_NTPSERVER, index);
  262.         if(count > 1)
  263.         {
  264.             if(index == count - 1) index--;
  265.             CBSetCurSel(hDlg, IDC_NTPSERVER, index);
  266.         }
  267.         else SetDlgItemText(hDlg, IDC_NTPSERVER, "");
  268.         PostMessage(hDlg, WM_NEXTDLGCTL, 1, FALSE);
  269.         OnNTPServer(hDlg);
  270.     }
  271. }
  272.  
  273. /*------------------------------------------------
  274.   browse sound file
  275. --------------------------------------------------*/
  276. void OnBrowse(HWND hDlg)
  277. {
  278.     char deffile[MAX_PATH], fname[MAX_PATH];
  279.     
  280.     GetDlgItemText(hDlg, IDC_SYNCSOUND, deffile, MAX_PATH);
  281.     
  282.     if(!BrowseSoundFile(g_hInst, hDlg, deffile, fname)) // soundselect.c
  283.         return;
  284.     
  285.     SetDlgItemText(hDlg, IDC_SYNCSOUND, fname);
  286.     PostMessage(hDlg, WM_NEXTDLGCTL, 1, FALSE);
  287. }
  288.  
  289. /*------------------------------------------------
  290.   "Test"
  291. --------------------------------------------------*/
  292. void OnSyncNow(HWND hDlg)
  293. {
  294.     char server[BUFSIZE_SERVER], soundfile[MAX_PATH];
  295.     int nTimeOut;
  296.     BOOL bLog;
  297.     int index;
  298.     
  299.     GetDlgItemText(hDlg, IDC_NTPSERVER, server, BUFSIZE_SERVER);
  300.     if(server[0] == 0) return;
  301.     
  302.     nTimeOut = UpDown_GetPos(hDlg, IDC_TIMEOUTSPIN);
  303.     if(nTimeOut & 0xffff0000) nTimeOut = 1000;
  304.     
  305.     bLog = IsDlgButtonChecked(hDlg, IDC_SNTPLOG);
  306.     
  307.     GetDlgItemText(hDlg, IDC_SYNCSOUND, soundfile, MAX_PATH);
  308.     
  309.     SetSNTPParam(server, nTimeOut, bLog, soundfile);
  310.     StartSyncTime(g_hwndMain, server, FALSE);
  311.     
  312.     index = CBFindStringExact(hDlg, IDC_NTPSERVER, server);
  313.     if(index != LB_ERR)
  314.         CBDeleteString(hDlg, IDC_NTPSERVER, index);
  315.     CBInsertString(hDlg, IDC_NTPSERVER, 0, server);
  316.     CBSetCurSel(hDlg, IDC_NTPSERVER, 0);
  317. }
  318.  
  319.